//
//  CertItemLength.m
//  TestProject
//
//  Created by 武侠 on 2022/2/17.
//  Copyright © 2022 zhulong. All rights reserved.
//

#import "CertItemLength.h"

@implementation CertItemLength

- (instancetype)initWithData:(char *)data index:(int)index {
    self = [super init];

    self.lenLen = 1;
    
    // 如果最高位是1（len>127），那么长度需要多个字节来表示
    // 第一个字节：除了最高位，其他位来表示长度的需要的字节
    if (data[index] & 0x80) {
        int lenLen = data[index] & 0x7f;        // 7f => 01111111，把最高位置0
        int len = 0;
        index++;    // 后移一位，长度开始的位置
        for (int j = 0; j < lenLen; j++) {
            len <<= 8;
            len += (uint8_t)data[index + j];
        }
        self.len = len;
        self.lenLen += lenLen;
    } else {                // 最高位是0（len <= 127）,那么长度只需要1个字节就能表示
        self.len = data[index] & 0x7f;
    }
    return self;
}

@end
